#ifndef NINSIPIDVIEW_H
#define NINSIPIDVIEW_H
#include <QtWidgets>
#include "solar/beacon/Field.h"

typedef  QString MSEVKEY_STRUCT;

class NinsipidView : public QPushButton{

    Q_OBJECT

public:
    enum colorType{
        BACK,
        FORE,
        BORDER
    };

    QStringList msevkeys = {MSEVKEY.WIN_NORMAL,
                                            MSEVKEY.WIN_LEAVE,
                                            MSEVKEY.WIN_ENTER,
                                            MSEVKEY.WIN_PRESS,
                                            MSEVKEY.WIN_RELEASE};

    NinsipidView(QWidget *parent = nullptr);

    NinsipidView(QString text, QWidget *parent = nullptr);

    void _init_();

    QString text();

    void doconfigur_text(QString text);

    void doconfigur_format(QString format);

    void doconfigur_formattext(QString text);

    void doconfigur_color(const QColor &color);

    void doconfigur_autoswitch_pixpre(QString pre, QString swt, bool enable=true);

    void doconfigur_autoswitch_pixswap(bool signals_enable=true);

    void doconfigur_pixmap(QVariant curtain);

    void doconfigur_textsetting(int align=Qt::AlignLeft | Qt::AlignVCenter, QFont font=QFont("KaiTi_GB2312",13), QPoint excursion=QPoint(0,0));

    void doconfigur_textsetting(QFont font=QFont("KaiTi_GB2312",13), QPoint excursion=QPoint(0,0));

    void doconfigur_textsetting(QPoint excursion=QPoint(0,0));

    void doconfigur_imgsetting(NT::CST_BRIGHT_SPOT drawtype, NT::WIN_ATTRIBUTE imgratio=NT::PIXLOAD_KEEPRATIO, int margins=0, QPoint excursion=QPoint(0,0), bool hi_q=false);

    void doconfigur_imgsetting(NT::WIN_ATTRIBUTE imgratio=NT::PIXLOAD_KEEPRATIO, int margins=0, QPoint excursion=QPoint(0,0), bool hi_q=false);

    void doconfigur_imgsetting(int margins=0, QPoint excursion=QPoint(0,0), bool hi_q=false);

    void doconfigur_imgsetting(QPoint excursion=QPoint(0,0), bool hi_q=false);

    void doconfigur_imgsetting(bool hi_q=false);

    void doconfigur_fontgroup(QMap<MSEVKEY_STRUCT , QFont> group_font);

    void doconfigur_colorgroup(QMap<MSEVKEY_STRUCT , QColor> group_color);

    void doconfigur_backcolorgroup(QMap<MSEVKEY_STRUCT , QColor> group_bkcolor);

    void doconfigur_bordercolorgroup(QMap<MSEVKEY_STRUCT, QColor> group_border);

    void doconfigur_pixmapgroup(QMap<MSEVKEY_STRUCT, QVariant> group_pixmap);

    void doconfigur_adjustedwidth(bool enable);

    void doconfigur_brighttype(NT::CST_BRIGHT_SPOT drawtype, uint radius = 4, uint border = 1);

    bool doconfigur_lock(bool valid=true);

    void doconfigur_unlock();

    QMenu* contentMenu();

    void setFont(const QFont &font);

    void doconfigur_popueway(Qt::MouseButton button);

    QMap<MSEVKEY_STRUCT, QColor> &color(colorType type){
        switch (type) {
            case BACK:
                return impact_backgroup;
            case FORE:
                return impact_foregroup;
            case BORDER:
                return impact_bordgroup;
            default:
                return impact_backgroup;
        }
    }

protected:
    virtual void paintEvent(QPaintEvent *event);
    virtual void mousePressEvent(QMouseEvent *event);
    virtual void mouseReleaseEvent(QMouseEvent *event);
    virtual void enterEvent(QEnterEvent *event);
    virtual void leaveEvent(QEvent *event);
    virtual void showEvent(QShowEvent *event);

    void pixmap_ratio(NT::WIN_ATTRIBUTE imgratio, QPixmap &pixmap, int w, int h, bool hi_q);

signals:
    void msnm_pre(QString);
    void msev_pre(QMouseEvent *);
    void msev_rls(QMouseEvent *);
    void msev_rpre();
    void msev_rrls();
    void msev_etr(bool);
    void msev_mv();
    void msnm_rls(QString);
    void msev_db();
    void msev_swtc_pre(bool);

private:
    bool polygonTouch();
    QMap<MSEVKEY_STRUCT, QFont> impact_fontgroup;
    QMap<MSEVKEY_STRUCT, QColor> impact_foregroup;
    QMap<MSEVKEY_STRUCT, QColor> impact_backgroup;
    QMap<MSEVKEY_STRUCT, QColor> impact_bordgroup;
    QMap<MSEVKEY_STRUCT, QPixmap> impact_imaggroup;
    QMap<MSEVKEY_STRUCT, int> impact_imagrgbc;
    KEY_ATTRIBUTE RPLKEY;
    MOUSE_ATTRIBUTE MSEVKEY;
    QMenu *popuMenu = new QMenu(this);

    void pixmapChange();

};
#endif

/*
 QString text // 当前文本
void doconfigur_text // 设置文本
void doconfigur_format // 设置格式，如 Load%1...,后续设置格式文本时，文本将替换掉%1
void doconfigur_formattext // 设置格式文本，优先级高于 doconfigur_text
void doconfigur_color // 设置文本颜色
void doconfigur_autoswitch_pixpre // 设置两个需要点击才能切换的图片，优先级高于doconfigur_pixmapgroup
void doconfigur_autoswitch_pixswap // 手动触发 doconfigur_autoswitch_pixpre 的图片切换
void doconfigur_pixmap // 设置图片，参数为 字符串 类型
void doconfigur_pixmap // 设置图片，参数为 Qpixmap 类型
void doconfigur_textsetting // 文本属性设置
void doconfigur_textsetting // 重载
void doconfigur_textsetting // 重载
void doconfigur_imgsetting // 图片属性设置
void doconfigur_imgsetting // 重载
void doconfigur_imgsetting // 重载
void doconfigur_imgsetting // 重载
void doconfigur_imgsetting // 重载
void doconfigur_fontgroup // 字体组设置
void doconfigur_colorgroup // 文本颜色组设置
void doconfigur_backcolorgroup // 背景颜色组设置
void doconfigur_bordercolorgroup // 边框颜色组设置
void doconfigur_pixmapgroup // 背景图片组设置，字典为 QString - QString 数据格式
void doconfigur_pixmapgroupE // 字体组设置，字典为 QString - QPixmap 数据格式
void doconfigur_adjustedwidth // 自适应组件宽
void doconfigur_brighttype // 组件背景图案设置，可选矩形和圆形
void doconfigur_lock // 锁定背景为点击颜色
void doconfigur_unlock // 解除锁定背景色
QMenu* contentMenu // 返回组件菜单对象，可插入选项，然后组件外连接信号
void doconfigur_popueway // 唤出菜单的方式，自定义按钮
QMap<MSEVKEY_STRUCT, QColor> &color // 返回背景/边框/文本 颜色组字典，在组件外修改
void pixmap_ratio // 图片属性设置，私有函数
信号:
void msnm_pre(QString); // 点击信号，传值为对象名称
void msev_pre(QMouseEvent *); // 左键点击信号
void msev_rls(QMouseEvent *); // 左键释放信号
void msev_rpre(); // 右键点击信号
void msev_rrls(); // 右键释放信号
void msev_etr(bool); // 鼠标进入组件信号，true为进入，false为离开
void msev_mv(); // 鼠标移动信号
void msnm_rls(QString); // 鼠标释放信号，传值为对象名称
void msev_db(); // 鼠标双击信号
void msev_swtc_pre(bool); // doconfigur_autoswitch_pixpre 的图片切换信号
 */
